##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Warning: package 'jsonlite' was built under R version 4.4.2
## Warning: package 'patchwork' was built under R version 4.4.2
## Cargando paquete requerido: stringr
## Cargando paquete requerido: reshape2
## Cargando paquete requerido: RJSONIO
##
## Adjuntando el paquete: 'RJSONIO'
## The following objects are masked from 'package:jsonlite':
##
## fromJSON, toJSON
## Cargando paquete requerido: plyr
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
##
## Adjuntando el paquete: 'plyr'
## The following objects are masked from 'package:dplyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
##
## Adjuntando el paquete: 'plotly'
## The following objects are masked from 'package:plyr':
##
## arrange, mutate, rename, summarise
## The following object is masked from 'package:httr':
##
## config
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
##
## Adjuntando el paquete: 'rjson'
## The following objects are masked from 'package:RJSONIO':
##
## fromJSON, toJSON
## The following objects are masked from 'package:jsonlite':
##
## fromJSON, toJSON
##
## Adjuntando el paquete: 'rlang'
## The following objects are masked from 'package:jsonlite':
##
## flatten, unbox
## Warning: package 'sf' was built under R version 4.4.2
## Linking to GEOS 3.12.2, GDAL 3.9.3, PROJ 9.4.1; sf_use_s2() is TRUE
##
## Adjuntando el paquete: 'tidyr'
## The following object is masked from 'package:reshape2':
##
## smiths
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ purrr 1.0.2
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ purrr::%@%() masks rlang::%@%()
## ✖ plotly::arrange() masks plyr::arrange(), dplyr::arrange()
## ✖ purrr::compact() masks plyr::compact()
## ✖ plotly::config() masks httr::config()
## ✖ plyr::count() masks dplyr::count()
## ✖ plyr::desc() masks dplyr::desc()
## ✖ plyr::failwith() masks dplyr::failwith()
## ✖ plotly::filter() masks dplyr::filter(), stats::filter()
## ✖ purrr::flatten() masks rlang::flatten(), jsonlite::flatten()
## ✖ purrr::flatten_chr() masks rlang::flatten_chr()
## ✖ purrr::flatten_dbl() masks rlang::flatten_dbl()
## ✖ purrr::flatten_int() masks rlang::flatten_int()
## ✖ purrr::flatten_lgl() masks rlang::flatten_lgl()
## ✖ purrr::flatten_raw() masks rlang::flatten_raw()
## ✖ rjson::fromJSON() masks RJSONIO::fromJSON(), jsonlite::fromJSON()
## ✖ plyr::id() masks dplyr::id()
## ✖ purrr::invoke() masks rlang::invoke()
## ✖ dplyr::lag() masks stats::lag()
## ✖ plotly::mutate() masks plyr::mutate(), dplyr::mutate()
## ✖ plotly::rename() masks plyr::rename(), dplyr::rename()
## ✖ purrr::splice() masks rlang::splice()
## ✖ plotly::summarise() masks plyr::summarise(), dplyr::summarise()
## ✖ plyr::summarize() masks dplyr::summarize()
## ✖ rjson::toJSON() masks RJSONIO::toJSON(), jsonlite::toJSON()
## ✖ rlang::unbox() masks jsonlite::unbox()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Warning: package 'viridis' was built under R version 4.4.2
## Cargando paquete requerido: viridisLite
Cargar environment
Determinar el consumo de antibióticos por comunidades autónomas, diferenciando entre recetado y no recetado, para identificar tendencias de uso.
tipo_ccaa_consumo_o_no <- read_delim("INPUT/DATA/datos_ccaa/tipo_ccaa_consumo_o_no.csv",
delim = ";", escape_double = FALSE, trim_ws = TRUE)## Rows: 3420 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (6): Sexo, Total Nacional, Comunidades y Ciudades Autónomas, Tipo de med...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
antibioticos <- tipo_ccaa_consumo_o_no %>%
dplyr::filter(`Tipo de medicamento` == "Antibióticos",`Sexo` == "Ambos sexos")%>%
dplyr::filter(`Sí o no` == "Sí")
# Esta tabla enseña que el 3,54% de la población española en la última encuesta reconoce
# haber consumido antibióticos en las últimas 2 semanas (En el año 2021)
antibioticos$Total <- gsub(",", ".", antibioticos$Total)
# Limpia espacios y caracteres no numéricos (si es necesario)
antibioticos$Total <- gsub(" ", "", antibioticos$Total)
# Convierte a numérico
antibioticos$Total <- as.numeric(antibioticos$Total)
# Revisa si hay NA después de la conversión
sum(is.na(antibioticos$Total)) # Muestra el número de NAs## [1] 0
consumo <- antibioticos %>%
group_by(`Comunidades y Ciudades Autónomas`) %>%
arrange(desc(Total))
c_c_final <- consumo %>%
mutate(`Comunidades y Ciudades Autónomas` = ifelse(is.na(`Comunidades y Ciudades Autónomas`), "Total País", `Comunidades y Ciudades Autónomas`))%>%
dplyr::rename(comunidades_autonomas = `Comunidades y Ciudades Autónomas`)%>%
select(comunidades_autonomas, Total)%>%
dplyr::rename(total_consumo_ccaa = Total)Con estos datos podemos observar de manera gráfica la tendencia de consumo de antibióticos por comunidad autónoma en este país.
# Crear el gráfico de barras
ggplot(c_c_final, aes(x = reorder(comunidades_autonomas, -total_consumo_ccaa), y = total_consumo_ccaa)) +
geom_bar(stat = "identity", fill = "steelblue") +
labs(x = "Comunidades Autónomas", y = "Total Consumo", title = "Consumo de antibióticos por Comunidad Autónoma") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) A continuación estudiaremos si esa cantidad de antibiótico se ha consumido de forma regulada, o por el contrario, no está recetado, favoreciendo así el autoconsumo de los mismos, lo cual se está considerando como una de las posibles causas de la resistencia a los antibióticos
# Leer el archivo .px
archivo_px <- read.px("INPUT/DATA/datos_ccaa/tipo_ccaa_recetado_o_no.px")
df_px <- as.data.frame(archivo_px)
# quedarme solo con los antibióticos
antibiotic <- df_px[df_px[["Tipo.de.medicamento"]] == "Antibióticos" & df_px$`Sexo` == "Ambos sexos", ]
# qué comunidad autónoma se automedica más
consumo_comunidades <- antibiotic%>%
dplyr::filter(`Recetado` == "No recetado") %>%
dplyr::filter(value != 0)%>%
group_by(`Comunidad.autónoma`) %>%
arrange(desc(value)) %>%
select(Comunidad.autónoma, value)%>%
dplyr::rename(comunidades_autonomas = Comunidad.autónoma)%>%
dplyr::rename("Automedicación (%)" = value)%>%
dplyr::mutate(comunidades_autonomas = case_when(
comunidades_autonomas == "Total" ~ "Total País",
TRUE ~ comunidades_autonomas
))unir_consumo_autoconsumo <- inner_join(c_c_final, consumo_comunidades, by = "comunidades_autonomas")%>%
mutate("Automedicación (%)" = total_consumo_ccaa * `Automedicación (%)`/100)%>%
dplyr::rename("Consumo total" = total_consumo_ccaa)%>%
pivot_longer(.,names_to = "Variable", values_to = "Valores", cols = c("Consumo total":"Automedicación (%)")) %>%
mutate(Variable = factor(Variable, levels = c("Consumo total","Automedicación (%)")))
ggplot(unir_consumo_autoconsumo, aes(fill = Variable, y = Valores, x = reorder(comunidades_autonomas, -Valores))) +
geom_bar(position = "stack", stat = "identity") +
scale_fill_manual(values = c("Consumo total" = "lightgreen",
"Automedicación (%)" = "tomato")) +
labs(x = "Comunidades Autónomas", y = "Porcentaje de Consumo", title = "Automedicación según el consumo de antibióticos por CCAA ")+
theme_minimal()+
theme(axis.text.x = element_text(angle = 45, hjust = 1))A continuación se presenta una función realizada para facilitar nuestro trabajo, ya que tenemos muchos datos de países y las fuentes no siempre están organizadas de forma que sea compatible la combinación de unos conjuntos de datos con otros. Muchas columnas ofrecen la misma información (los nombres de los países) pero expresada en formatos diferentes, algunas dan el nombre del país y otras el código internacional que las identifica.
library(dplyr)
library(rlang)
cambio_nombre_codigo <- function(Tabla, columna) {
# Convertir el nombre de la columna en un símbolo
columna_sym <- ensym(columna)
Tabla %>%
mutate(
!!columna_sym := case_when(
!!columna_sym == "Slovakia" ~ "SK",
!!columna_sym == "Belgium" ~ "BE",
!!columna_sym == "Cyprus" ~ "CY",
!!columna_sym == "Greece" ~ "EL",
!!columna_sym == "Romania" ~ "RO",
!!columna_sym == "Bulgaria" ~ "BG",
!!columna_sym == "France" ~ "FR",
!!columna_sym == "Malta" ~ "MT",
!!columna_sym == "Poland" ~ "PL",
!!columna_sym == "Spain" ~ "ES",
!!columna_sym == "Ireland" ~ "IE",
!!columna_sym == "Italy" ~ "IT",
!!columna_sym == "Luxembourg" ~ "LU",
!!columna_sym == "Portugal" ~ "PT",
!!columna_sym == "Czech Republic" ~ "CZ",
!!columna_sym == "Czechia" ~ "CZ",
!!columna_sym == "Finland" ~ "FI",
!!columna_sym == "Austria" ~ "AT",
!!columna_sym == "Germany" ~ "DE",
!!columna_sym == "Denmark" ~ "DK",
!!columna_sym == "Estonia" ~ "EE",
!!columna_sym == "Hungary" ~ "HU",
!!columna_sym == "Croatia" ~ "HR",
!!columna_sym == "Lithuania" ~ "LT",
!!columna_sym == "Latvia" ~ "LV",
!!columna_sym == "Netherlands" ~ "NL",
!!columna_sym == "Sweden" ~ "SE",
!!columna_sym == "Slovenia" ~ "SI",
TRUE ~ as.character(!!columna_sym) # Mantener valores originales si no coinciden
)
)
}
cambio_codigo_nombre <- function(Tabla, columna) {
# Convertir el nombre de la columna en un símbolo
columna_sym <- ensym(columna)
Tabla %>%
mutate(
!!columna_sym := case_when(
!!columna_sym == "SK" ~ "Slovakia",
!!columna_sym == "BE" ~ "Belgium",
!!columna_sym == "CY" ~ "Cyprus",
!!columna_sym == "EL" ~ "Greece",
!!columna_sym == "RO" ~ "Romania",
!!columna_sym == "BG" ~ "Bulgaria",
!!columna_sym == "FR" ~ "France",
!!columna_sym == "MT" ~ "Malta",
!!columna_sym == "PL" ~ "Poland",
!!columna_sym == "ES" ~ "Spain",
!!columna_sym == "IE" ~ "Ireland",
!!columna_sym == "IT" ~ "Italy",
!!columna_sym == "LU" ~ "Luxembourg",
!!columna_sym == "PT" ~ "Portugal",
!!columna_sym == "CZ" ~ "Czech Republic",
!!columna_sym == "FI" ~ "Finland",
!!columna_sym == "AT" ~ "Austria",
!!columna_sym == "DE" ~ "Germany",
!!columna_sym == "DK" ~ "Denmark",
!!columna_sym == "EE" ~ "Estonia",
!!columna_sym == "HU" ~ "Hungary",
!!columna_sym == "HR" ~ "Croatia",
!!columna_sym == "LT" ~ "Lithuania",
!!columna_sym == "LV" ~ "Latvia",
!!columna_sym == "NL" ~ "Netherlands",
!!columna_sym == "SE" ~ "Sweden",
!!columna_sym == "SI" ~ "Slovenia",
TRUE ~ as.character(!!columna_sym) # Mantener valores originales si no coinciden
)
)
}Función para abrir los archivos de las bacterias resistentes en la ganadería
Para abrir los datos relativos a la AMR en la ganadería, se presenta una función que permite abrir una carpeta con numerosos archivos de extensión .json con la misma estructura y leerlos.
obtener_nombre<-function(carpeta){
archivos <- as.list(list.files(path =carpeta))
lista_nombres<-list()
for(i in 1:length(archivos)){
posicion1<-regexpr("_", archivos[[i]])
posicion2<-regexpr("\\.", archivos[[i]])
subcadena<-substr(archivos[[i]], posicion1+1, posicion2-1)
lista_nombres[[i]]<-subcadena
}
return(lista_nombres)
}
obtener_archivo<-function(direccion){
lista_paises<-obtener_nombre(direccion)
lista_enlace<-list()
direccion_archivos<-list()
for(i in lista_paises){
cada_pais<-paste0("AMR_",i,".json")
lista_enlace[i]<-cada_pais
}
for(i in lista_enlace){
cada_archivo<-paste0(direccion,"/",i)
direccion_archivos[i]<-cada_archivo
}
for(i in direccion_archivos){
pais<-fromJSON(file= i)
enlace<-pais$links$archive
respuesta_archivo <- GET(enlace)# Hacer la solicitud HTTP para descargar el archivo
nombre_archivo<-basename(enlace)#Extrae el nombre del archivo de la URL
if (status_code(respuesta_archivo) == 200) {# Verificar si la solicitud fue exitosa (código 200, código estándar HTTP que significa "OK")
# Guardar el archivo ZIP localmente en formato binario
writeBin(content(respuesta_archivo, "raw"), nombre_archivo)
print("Archivo ZIP descargado correctamente.")
unzip(nombre_archivo, exdir = "carpeta_destino", overwrite = TRUE)
} else {
print(paste("Error al descargar el archivo. Código de respuesta:", status_code(respuesta_archivo)))
}
}
}
obtener_archivo("INPUT/DATA/Resistecia_Antibioticos_UE")
leer_archivo <- function(carpeta) {
carpeta_destino <- carpeta
archivos_zip <- list.files(carpeta_destino, pattern = "\\.zip$", full.names = TRUE)
# Iterar sobre los archivos .zip y descomprimirlos
for (archivo in archivos_zip) {
# Descomprimir el archivo .zip
archivos_extraidos <- unzip(archivo, exdir = carpeta_destino, overwrite = TRUE)
print(paste("Descomprimido:", archivo)) # Imprimir cada archivo que se descomprime
# Filtrar el archivo .xlsx entre los extraídos
archivo_xlsx <- archivos_extraidos[grepl("\\.xlsx$", archivos_extraidos)]#Aquí, grepl() busca archivos cuyos nombres terminen con .xlsx
# Verificar si hay algún archivo .xlsx descomprimido
if (length(archivo_xlsx) > 0) {
# Leer el archivo Excel como dataframe
datos_xlsx <- read_excel(archivo_xlsx[1]) # Leer el primer archivo .xlsx encontrado
# Asignar el dataframe al Global Environment usando el nombre del archivo como variable
nombre_variable <- make.names(basename(archivo_xlsx[1])) # Crear un nombre de variable válido
assign(nombre_variable, datos_xlsx, envir = .GlobalEnv) # Asignar el dataframe al Global Environment
}
}
}
leer_archivo("carpeta_destino")Juntar los dataframes que tenemos en el enviroment 1. Listar los nombres de todos los dataframes que terminan en “.xlsx” (ajusta si es necesario) 2. Convertir los nombres a una lista de dataframes usando mget() 3. Unir todos los dataframes en uno solo usando bind_rows
nombres_dataframes <- ls(pattern = "_AMR_PUB\\.xlsx$")
lista_dataframes <- mget(nombres_dataframes)
df_combinado <- bind_rows(lista_dataframes, .id = "origen")Carga del global enviroment El entorno en el que guardan todos los dataframes de cada pais resultantes de la función leer_archivo, y el dataframe df_combinado del codigo anterior se ha cargado anteriormente ya que incluye otros datos que ya se han empleado.
Modificación y obtencion del dataframe con los datos seleccionamos las columnas que vamos a necesitar y filtramos en la columna de las bacterias solo las patogénicas.
Cambiamos los nombres de las columnas y lo asignamos al dataframe
paises_UE_df<-df_combinado%>%
select(rep_Country_name,rep_Country_code,zoonosis_name,matrix_name,totUnitsTested,totUnitsPositive,sampUnitType_name,sampType_name,MIC_name,CUTOFFVALUE)%>%
mutate(zoonosis_name = sub(".*", "", zoonosis_name))%>% # Extraer solo la primera palabra
filter(zoonosis_name != "Escherichia coli, non-pathogenic, unspecified")
nuevos_nombres <- c("NombrePais", "Codigo", "zoonosis_name","OrigenMuestra", "TotalMuestras","MuestraPositiva","Tipo_Unidad_Muestra","TipoMuestra","MIC_name","ValorCorte") # Modifica según el número de columnas
colnames(paises_UE_df) <- nuevos_nombresExplorar cómo el consumo de antibióticos en sectores como el personal (comunitario), hospitalario y ganadero se relaciona con los niveles de resistencia a antibióticos en diferentes países de la UE.
Uno de los factores a estudiar era el consumo/administración de este tipo de los medicamentos por parte de los hospitales y la ciudadanía de manera individual, y eso se ve reflejado en los siguientes datos extraídos de la encuesta europea anual.
lista_pais <- list("BE", "BG", "CZ", "DK", "DE", "EE", "IE", "EL", "ES", "FR", "HR", "IT", "CY", "LV", "LT", "LU", "HU", "MT", "NL",
"AT", "PL", "PT", "RO", "SI", "SK", "FI", "SE")
DDD_Europa_Json<- jsonlite::fromJSON("INPUT/DATA/DDD_1000_habitantes_paises.JSON")
DDD_Europa_df <- cambio_nombre_codigo(DDD_Europa_Json, "Country")
# Usar la función 'cambio_nombre_codigo' para convertir nombres de países en códigos
DDD_Europa_df <- DDD_Europa_df%>%
mutate(DDD_per_1000_inhabitants_per_day = as.numeric(`DDD per 1000 inhabitants per day`))%>%
mutate(DDD_per_100_inhabitants_per_day = DDD_per_1000_inhabitants_per_day / 10) %>%
dplyr::filter(Country %in% unlist(lista_pais)) %>%
select(-DDD_per_1000_inhabitants_per_day, -`DDD per 1000 inhabitants per day`)
# Añadir columna para calcular DDD por cada 100 habitantes y eliminar la columna originalAl tratarse del número de dosis estándar consumidas diariamente por cada 1000 personas, se divide entre 10 para que se convierta en el número de dosis diarias por cada 100 habitantes.
Si se considera que cada dosis se consume por una persona diferente, el resultado de la segunda columna significa que el x% de la población de cada país consume antibiótico de forma diaria en el sector hospitalario y comunitario.
Gráfico de barras de la Dosis de antibióticos media Diaria Definida de los países ordenados de mayor a menor consumo
grafico_DDD <- ggplot(DDD_Europa_df, aes(x = reorder(Country, -DDD_per_100_inhabitants_per_day),
y = DDD_per_100_inhabitants_per_day)) +
geom_bar(stat = "identity", fill = "turquoise") +
labs(title = "DDD por 100 habitantes por día en Europa",
x = "País",
y = "DDD por 100 habitantes por día") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
grafico_DDDSe puede analizar de forma individual, para determinar qué país consume más antibióticos de forma registrada por el sistema de salud, o por el contrario, se puede comparar con otros factores que se están estudiando como posibles causantes de la resistencia a los antibióticos para encontrar relaciones con el porcentaje de la población de los diferentes países de la UE que han dado positivo en resistencia a los antimicrobianos.
A continuación se pretende estudiar el consumo de antibióticos por parte de los animales de granja suministrados por los profesionales del sector, que en ocasiones resultan en sobremedicación. Este problema se suele dar como resultado de un tratamiento (no necesario) cuyo objetivo es tener animales sanos y sin ninguna enfermedad para poder venderlos y que el producto cárnico no se desperdicie sin perder dinero.
La apertura y muestra de los datos sobre la tendencia de consumo de antibióticos en la ganadería se realiza de la siguiente manera:
## New names:
## • `` -> `...3`
## • `` -> `...5`
## • `` -> `...8`
# Procesamiento inicial de los datos
a_e_g <- ant_europa_g %>%
select("Country", "...5") %>% # Seleccionar las columnas relevantes
dplyr::rename(Antibiotic_use_in_livestock_1000_PCU = `...5`) %>% # Renombrar columnas
mutate(Year = "2022") %>% # Añadir la columna de año
cambio_nombre_codigo("Country") %>% # Usar la función para cambiar nombres de países a códigos
drop_na() %>% # Eliminar filas con valores NA
relocate(3, .before = 2) # Reubicar la columna 'Year' antes de 'Country'
# Crear un nuevo data frame con datos modificados
new <- a_e_g %>%
select(-Year) %>% # Eliminar la columna 'Year'
mutate(Antibiotic_use_in_livestock_100_PCU = as.numeric(Antibiotic_use_in_livestock_1000_PCU) / 10) %>% # Calcular el nuevo indicador
select(-Antibiotic_use_in_livestock_1000_PCU) # Eliminar la columna originalLa incidencia de la AMR se registra mediante una encuesta europea en la cual se escoge un grupo de individuos al azar de cada país y se analiza la presencia de bacterias resistentes a determinados antibióticos. Para simplificar la representación y obtener conclusiones más claras, se hace la media entre los registros positivos de todos los antibióticos referentes a la misma bacteria para obtener la incidencia media de la misma. Además, también se calcula media entre todas las bacterias para obtener un valor orientativo acerca del porcentaje de los encuestados de cada país que presenta resistencia ante los antibióticos.
# Cargar el archivo CSV de incidencia de enfermedades
Incidencia_enfermedades <- read_csv("INPUT/DATA/ECDC_encuesta_AMR_incidencia_enfermedades.csv")## Rows: 98334 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (8): HealthTopic, Population, Distribution, Unit, RegionCode, RegionName...
## dbl (2): Time, CategoryIndex
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Filtrar los datos para el año 2022 y las categorías Male y Female
incidencia_2022MF <- Incidencia_enfermedades %>%
dplyr::filter(Time == 2022) %>%
dplyr::filter(Category == 'Male' | Category == 'Female')
# Convertir 'Value' a numérico
incidencia_2022MF$Value <- as.numeric(incidencia_2022MF$Value)## Warning: NAs introducidos por coerción
# Crear el dataframe media_poblacion con una nueva columna 'grupo'
media_poblacion <- incidencia_2022MF %>%
dplyr::select(-Unit, -HealthTopic, -Time, -Distribution) %>%
mutate(grupo = substr(Population, 1, 3))
lista_codigos_paises <- list("AT", "BE", "BG", "CY", "CZ", "DE", "DK", "EE", "EL", "ES", "FI", "FR", "HR", "HU",
"IE", "IT", "LT", "LU", "LV", "MT", "NL", "PL", "PT", "RO", "SE", "SI", "SK")
# Calcular la media de 'Value' por 'RegionCode' y 'grupo'
otra <- media_poblacion %>%
select(-Category, -CategoryIndex, -Population) %>%
arrange(RegionCode, grupo) %>% # Ordena los datos
group_by(RegionCode, grupo) %>% # Agrupa por RegionCode y grupo
dplyr::summarise(mean_value = mean(Value, na.rm = TRUE))%>%
dplyr::filter(RegionCode %in% lista_codigos_paises) %>% # Calcula la media en cada grupo y desagrupa
tidyr::drop_na() %>%
mutate(grupo = recode(grupo, "Ent" = "Enterococcus", "Esc" = "Escherichia","Aci"="Acinetobacter",
"Kle"="Klebsiella","Pse" = "Pseudomonas","Sta"="Staphylococcus", "Str"="Streptococcus"))## `summarise()` has grouped output by 'RegionCode'. You can override using the
## `.groups` argument.
media_region <- otra %>%
group_by(RegionCode) %>%
summarise(mean_value_region = mean(mean_value, na.rm = TRUE))%>%
arrange(desc(mean_value_region))
bacterias_personas<-otra %>%
dplyr::filter(grupo %in% c("Enterococcus", "Escherichia")) Gráfico sobre la relación entre el consumo de AB y la AMR
paises_consumo_ab_sectores<-left_join(x = DDD_Europa_df, y = new, by = "Country")%>%
mutate(DDD_per_100_inhabitants_per_year = DDD_per_100_inhabitants_per_day*365/100*100)%>%
mutate(Antibiotic_use_in_livestock_1000_PCU = Antibiotic_use_in_livestock_100_PCU*10)%>%
dplyr::select(-DDD_per_100_inhabitants_per_day)%>%
left_join(x = ., y = media_region, by = c("Country" = "RegionCode"))%>%
group_by(Country, mean_value_region)%>%
dplyr::rename("100 habitantes (mg)" = DDD_per_100_inhabitants_per_year, "1000 PCU (mg)" = Antibiotic_use_in_livestock_100_PCU, "Valor" = mean_value_region)%>%
pivot_longer(., names_to = "Consumo", values_to = "Dosis", cols= c(2:3))
ggplot(paises_consumo_ab_sectores,aes(x=Dosis, y=Valor))+
geom_point(aes(color=factor(Consumo)))+
geom_smooth(method = 'lm',aes(colour=factor(Consumo)))+
labs(title = 'Relación entre el consumo de antibióticos y resistencia antimicrobiana',
y='Incidencia',
x= 'Consumo',
colour='Consumo en dosis')## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 2 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
Gráfico acerca de la relación entre la resistencia antimicrobiana de animales de ganadería y personas
positivos_animales <- bacterias_personas%>%
group_by(RegionCode)%>%
dplyr::summarise(media = mean(mean_value, na.rm = TRUE))
positivos_resist_sectores<-left_join(x = media_region, y = positivos_animales, by = "RegionCode")%>%
dplyr::rename(Animales = media)%>%
dplyr::rename(Personas = mean_value_region) %>%
arrange(desc(Personas))%>%
group_by(RegionCode) %>%
pivot_longer(.,names_to = "Variable", values_to = "Valores", cols = c(Personas:Animales)) %>%
mutate(Variable = factor(Variable, levels = c("Personas","Animales"))) %>%
filter(Valores!=0.00)
#GRAFICA DE BARRAS DE ENTRE MEDIA DE POSITIVOS EN ANIMALES Y PERSONAS
ggplot(data = positivos_resist_sectores, aes(y = Valores, x = RegionCode)) +
geom_bar(aes(fill = Variable), position = "dodge", stat = "identity")+
labs(title='Media por paises de positivos en animales y en personas',
x='Paises',
fill='% medio positivos')+
scale_fill_manual(values = c("Personas" = 'violet',
"Animales" = "blue")) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))# Calcular la media basada en la proporción de positivos
media_ganaderia <- paises_UE_df %>%
group_by(Codigo, zoonosis_name) %>%
dplyr::summarise(
media = mean((MuestraPositiva / TotalMuestras)*100, na.rm = TRUE)) %>%
ungroup() %>%
tidyr::drop_na()## `summarise()` has grouped output by 'Codigo'. You can override using the
## `.groups` argument.
##
## Acinetobacter Enterococcus Escherichia Klebsiella Pseudomonas
## 21 24 24 24 24
## Staphylococcus Streptococcus
## 24 24
##
## Campylobacter Enterococcus, Escherichia Methicillin Salmonella
## 27 3 28 2 25
#Observamos que las unicas bacterias comunes son Enterococcus y Escherichia
#Filtro solo las bacterias comunes y les cambio el nombre de las bacterias comunes
bacterias_personas<-otra %>%
dplyr::filter(grupo %in% c("Enterococcus", "Escherichia"))
#Filtro las bacterias comunes
media_ganaderia_nueva<-media_ganaderia %>%
filter(zoonosis_name %in% c("Enterococcus,", "Escherichia")) %>%
mutate(zoonosis_name = recode(zoonosis_name, "Enterococcus," = "Enterococcus"))Boxplot de la distribución de las bacteras resistentes en ganadería y ciudadanos
#BOXPLOT DE BACTERIAS QUE AFECTAN A ANIMALES Y BACTERIAS
boxplot_bac_ganaderia<-ggplot(media_ganaderia,aes(x=zoonosis_name, y=media, fill=zoonosis_name)) +
geom_boxplot() +
labs(title = "Incidencia de bacterias en ganadería ",
x = "Bacterias", y = "Incidencia media") +
theme(legend.position="none",
axis.text.x = element_text(angle = 45, hjust = 1))
boxplot_baterias_personas <- ggplot(otra, aes(x = grupo, y = mean_value, fill=grupo)) +
geom_boxplot() +
labs(title = "Incidencia de bacterias en personas ",
x = "Bacterias", y = "Incidencia media") +
theme(legend.position="none",
axis.text.x = element_text(angle = 45, hjust = 1))
boxplot_bac_ganaderia + boxplot_baterias_personasReflejo de la presencia de las bacterias resistentes en animales en la presencia de las mismas en humanos
tabla_unida <- full_join(x=media_ganaderia_nueva, y= bacterias_personas,
by = c("Codigo" = "RegionCode", "zoonosis_name" = "grupo")) %>%
dplyr::rename(Ganaderia=media, Poblacion=mean_value) %>%
pivot_longer(.,names_to = "Variable", values_to = "Valores", cols = c(Ganaderia:Poblacion)) %>%
mutate(Bacteria = factor(zoonosis_name, levels = c("Escherichia","Enterococcus"))) %>%
mutate(Variable = factor(Variable, levels = c("Ganaderia","Poblacion"))) %>%
tidyr::drop_na()
ggplot(data = tabla_unida, aes(x = Valores, y = Codigo)) +
geom_bar(aes(fill = Bacteria), position = "dodge", stat = "identity") +
facet_wrap(facets = vars(Variable), nrow = 1)+
labs(x = "Porcentaje de incidencia")Mapa Interactivo de los positivos AMR por paises de la UE
library(sf)
library(ggplot2)
library(plotly)
library(dplyr)
library(viridis)
paises_UE <- c(
"Cyprus", "France", "Lithuania", "Czechia", "Germany",
"Estonia", "Latvia", "Sweden", "Finland", "Luxembourg",
"Belgium", "Spain", "Denmark", "Romania", "Hungary",
"Slovakia", "Poland", "Ireland", "Greece", "Austria",
"Italy", "Netherlands", "Croatia", "Slovenia", "Bulgaria",
"Portugal", "Malta"
)
mapa_mudo <- st_read("INPUT/DATA/mapaMundi") ## Reading layer `ne_10m_admin_0_countries' from data source
## `C:\Users\usuario\seminario_fuentes\INPUT\DATA\mapaMundi' using driver `ESRI Shapefile'
## Simple feature collection with 258 features and 168 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -180 ymin: -90 xmax: 180 ymax: 83.6341
## Geodetic CRS: WGS 84
mapa_mundo_europa <- mapa_mudo %>%
dplyr::filter(NAME %in% paises_UE)
mapa_mundo_europa <- mapa_mudo %>% dplyr::filter(NAME %in% paises_UE)
positivos_por_ciudad <- paises_UE_df %>%
dplyr::filter(NombrePais != "United Kingdom (Northern Ireland)")%>%
group_by(NombrePais) %>%
dplyr::summarize(total_pruebas = sum(TotalMuestras, na.rm = TRUE),
total_positivos= sum(MuestraPositiva, na.rm = TRUE)) %>%
mutate(ratio_positivo = (total_positivos / total_pruebas) * 100)
# Unir datos de positividad al mapa
mapa_mundo_europa$NAME <- as.character(mapa_mundo_europa$NAME)
positivos_por_ciudad$NombrePais <- as.character(positivos_por_ciudad$NombrePais)
# Realizar el join usando las columnas correctas
mapa_mundo_europa <- mapa_mundo_europa %>%
left_join(positivos_por_ciudad, by = c("NAME" = "NombrePais"))
mapa <- ggplot(mapa_mundo_europa) +
geom_sf(aes(fill = ratio_positivo)) +
scale_fill_viridis_c(option = "plasma", na.value = "gray") +
labs(title = "Tasa de Positividad por País en Europa",
fill = "Tasa de Positividad (%)") +
coord_sf(xlim = c(-30, 50), ylim = c(35, 72), expand = FALSE) + # Ajustar límites para hacer zoom en Europa
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
# Convertir el gráfico a interactivo con plotly
mapa_interactivo <- ggplotly(mapa)
mapa_interactivoAnalizar si existe una relación significativa entre el Producto Interno Bruto de los países de la Unión Europea y los niveles de resistencia a antibióticos.
## Warning: Missing column names filled in: 'X14' [14]
##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## `freq,na_item,ppp_cat,geo\TIME_PERIOD` = col_character(),
## `2012` = col_double(),
## `2013` = col_double(),
## `2014` = col_double(),
## `2015` = col_double(),
## `2016` = col_double(),
## `2017` = col_double(),
## `2018` = col_double(),
## `2019` = col_double(),
## `2020` = col_double(),
## `2021` = col_double(),
## `2022` = col_double(),
## `2023` = col_double(),
## X14 = col_logical()
## )
# Cambio de nombre columna
colnames(pib)[1] <- "pais"
# Nos quedamos con las últimas letras
pib$pais <- substr(pib$pais, nchar(pib$pais) - 1, nchar(pib$pais))
lista_pais <- list("BE", "BG", "CZ", "DK", "DE", "EE", "IE", "EL", "ES", "FR", "HR", "IT", "CY", "LV", "LT", "LU", "HU", "MT", "NL",
"AT", "PL", "PT", "RO", "SI", "SK", "FI", "SE")
# nos quedamos solo con los países de la UE
# Filtrar los datos, quitar columnas nulas y seleccionar las columnas necesarias en una tubería
pib_2022_desc <- pib %>%
dplyr::filter(pais %in% unlist(lista_pais)) %>% # Filtrar por los países en 'lista_pais'
dplyr::select(where(~ all(!is.na(.)))) %>% # Eliminar columnas con todos los valores nulos
dplyr::select(pais, `2022`) %>% # Seleccionar las columnas 'pais' y '2022'
arrange(desc(`2022`)) # Ordenar por el PIB del 2022 en orden descendenteTras el tratamiento de estos datos se puede ver de manera gráfica la comparativa entre los países.
grafico_pib <- ggplot(pib_2022_desc, aes(x = reorder(pais, -`2022`), y = `2022`)) +
geom_bar(stat = "identity", fill = "gold") +
labs(x = "País", y = "Valor en 2022", title = "PIB por País en 2022") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor legibilidad
grafico_pibUna vez observada la primera variable, generamos los datos del valor medio de la resistencia a antimicrobianos en los países europeos para comprobar si existe una relación o, efectivamente no tiene que ver.
Este código cargado en el entorno, es capaz de generar gráficos que permitan ver la incidencia de las bacterias en cada país.
# graficos positivos generales
# Crear el gráfico usando los datos ordenados
grafico <- ggplot(media_region, aes(x = reorder(RegionCode, -mean_value_region), y = mean_value_region)) +
geom_bar(stat = "identity", fill = "skyblue", color = "blue") +
labs(
title = "Media de Incidencia por Región (Orden Descendente)",
x = "País",
y = "Media de Incidencia"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1)
)
graficoCon el objetivo de estudiar la relación entre el nivel económico y el de AMR de la UE, hemos hecho una regresión cuya variable independiente será el PIB y la dependiente, en el eje y, es el porcentaje de población animal y humana resistente a antibióticos representado en un factor dividido entre los dos grupos. La gráfica final es una de dispersión en la cual cada punto se corresponde con un país de la Unión Europea y cada color representa un nivel del factor.
positivos_sinPivotar<-left_join(x = media_region, y = positivos_animales, by = "RegionCode")%>%
dplyr::rename(porcentaje_posit_animales = media)%>%
dplyr::rename(porcentaje_posit_personas = mean_value_region)
positivos_PIB<-full_join(y= pib_2022_desc ,x=positivos_sinPivotar,by=c('RegionCode'='pais')) %>%
dplyr::rename(PIB='2022') %>%
dplyr::rename(Animales=porcentaje_posit_animales, Personas = porcentaje_posit_personas)%>%
group_by(RegionCode) %>%
pivot_longer(.,names_to = "Variable", values_to = "Valores", cols = c(Personas:Animales)) %>%
mutate(Variable = factor(Variable, levels = c("Personas","Animales"))) %>%
filter(Valores!=0.00)
final<-ggplot(positivos_PIB,aes(x=PIB, y=Valores))+
geom_point(aes(color=factor(Variable)))+
geom_smooth(method = 'lm',aes(colour=factor(Variable)))+
labs(title = 'Relación entre PIB y resistencia antimicrobiana',
y='Positivos en AMR',
colour='Poblaciones de positivos')
final## `geom_smooth()` using formula = 'y ~ x'